/**
 * 作者:hanbo
 * 日期:2019/1/2810:52
 * 描述:
 */

const {
    app,
    Menu,
    BrowserWindow,
    dialog,
    shell,
    nativeImage,
    ipcMain
} = require('electron');
const {getCurrentUrl, downFile,clearAll} = require("./mainjs/common");
const async = require('async');
let mapUrl;

// 保持一个对于 window 对象的全局引用，不然，当 JavaScript 被 GC，
// window 会被自动地关闭
let mainWindow = null;
//瓦片存储路径
let rootPath = null;
//设置菜单
let dockMenu = Menu.buildFromTemplate([
    {
        label: '文件',
        submenu: [
            {
                label: '设置工作区',
                click: function () {
                    dialog.showOpenDialog({properties: ['openDirectory'], title: "选择下载瓦片存储位置"}, function (path) {
                        if (path) {
                            rootPath = path;
                            dockMenu.getMenuItemById("inputExtend").enabled = true;
                            dockMenu.getMenuItemById("squareSelection").enabled = true;
                            dockMenu.getMenuItemById("clearAll").enabled = true;
                        }
                    })
                }
            },
            {
                label: '清空工作区',
                id: "clearAll",
                enabled: false,
                click: function () {
                    clearAll(rootPath+"\\",function () {
                        dialog.showMessageBox({
                            type: "info",//图标类型
                            title: "进度",//信息提示框标题
                            message: "清空工作区完成"//信息提示框内容
                        })
                    })
                }
            }
        ]
    },
    {
        label: '选择方式',
        submenu: [
            {
                label: '框选',
                type: "checkbox",
                id: "squareSelection",
                enabled: false,
                click: function (e) {
                    if (e.checked) {
                        mainWindow.webContents.send('btn-event', 0);
                    } else {
                        mainWindow.webContents.send('btn-event', 1);
                    }
                }
            },
            {
                label: '输入坐标范围',
                enabled: false,
                id: "inputExtend",
                click: function () {
                    mainWindow.webContents.send('btn-event', 2);
                }
            }
        ]
    },
    {
        label: '帮助', click: function () {
            dialog.showMessageBox({
                type: "info",//图标类型
                title: "帮助",//信息提示框标题
                message: "GIS小博实验室出品,如需要帮助请联系QQ965894265",//信息提示框内容
                buttons: ["前往作者博客", "取消"],//下方显示的按钮
                icon: nativeImage.createFromPath("./icon/search-globe.png"),//图标
                cancelId: 2//点击x号关闭返回值
            }, function (index) {
                if (index == 0) {//点击前往博客后，从本地浏览器打开博客地址
                    shell.openExternal('https://blog.csdn.net/gisuuser/')
                }
            })
        }
    }
]);
Menu.setApplicationMenu(dockMenu);

// 当所有窗口被关闭了，退出。
app.on('window-all-closed', function () {
    // 在 OS X 上，通常用户在明确地按下 Cmd + Q 之前
    // 应用会保持活动状态
    if (process.platform != 'darwin') {
        app.quit();
    }
});

// 当 Electron 完成了初始化并且准备创建浏览器窗口的时候
// 这个方法就被调用
app.on('ready', function () {
    //接受消息下载文件
    ipcMain.on('downFile', function (event, args) {
        async.mapLimit(args,3,function (coordinate,callBack) {
            let url = getCurrentUrl(mapUrl, coordinate[0], coordinate[1], coordinate[2]);
            downFile(url, rootPath + "\\" + coordinate[2] + "\\" + coordinate[0], coordinate[1] + ".png", function (state) {
                loadSuccess(coordinate, state);
                callBack(null,"下载成功")
            })
        },function(err,result){
            console.log(result)
        });
    });
    ipcMain.on('mapUrl', function (event, arg) {
        mapUrl = arg;
    });
    ipcMain.on('errorMessage', function (event, arg) {
       dialog.showErrorBox(arg[0],arg[1])
    });


    // 创建浏览器窗口。
    mainWindow = new BrowserWindow({
        width: 800, height: 600,
        webPreferences: {
            nodeIntegrationInWorker: true//支持多线程
        }
    });
    // 加载应用的 index.html
    mainWindow.loadURL('file://' + __dirname + '/ui/index.html');

    // 打开开发工具
    // mainWindow.openDevTools();

    // 当 window 被关闭，这个事件会被发出
    mainWindow.on('closed', function () {
        // 取消引用 window 对象，如果你的应用支持多窗口的话，
        // 通常会把多个 window 对象存放在一个数组里面，
        // 但这次不是。
        mainWindow = null;
    });

    // if (require('electron-connect')) {
    //     require('electron-connect').client.create(mainWindow);
    // }
});

/**
 * 下载成功向前台发送消息
 * @param arg {Number[]} xyz
 */
function loadSuccess(arg, state) {
    mainWindow.webContents.send('down-success', arg, state);
}
